A storage server is a computer that provides network storage services relating to the organization of data on writable, storage media, such as non-volatile memories and disks. A storage server is configured to operate according to a client/server model of information delivery to enable one or more (potentially many) clients to access the data served by the system. A storage server can employ a storage architecture that serves the data with both random and streaming access patterns at either a file level, as in network attached storage (NAS) environments, or at the block level, as in a storage area network (SAN). Storage servers store data on various types of non-volatile storage media such as, for example, relatively high latency (i.e., longer access times) hard disk drive devices (HDDs) and relatively low latency (i.e., shorter access times) such as solid-state devices (SSDs) and flash memory. Some storage servers use a mix of hybrid storage media (e.g., by intermixing relatively expensive but fast electronic storage, such as SSDs with relatively inexpensive magnetic storage, such as HDDs) to provide a total storage space of the system.
A network storage system may have any of various configurations. For example, a network storage system can include a monolithic, non-distributed storage server or it can include one or more distributed storage servers, which may be connected in clusters to allow many storage clients to access data containers that are stored in the storage system and managed by one or more storage servers. Clustered storage servers provide improved scalability and can be configured to communicate with one another to act collectively to increase performance or to offset any single storage system failure within the cluster.
Storage clients can execute any of various applications requiring the data services of a network storage system. Each such application may be considered a “workload” that is serviced by the network storage system. In many cases, a network storage system will simultaneously service numerous workloads of different types and with varying levels of SLOs. In addition, current data center environments support multiple workloads that share the same servers and storage system (i.e., multi-tenant support). The workloads often have one or more specified SLOs relating to a storage system characteristic or attribute. For example, a workload may have an SLO specifying a minimum value of X (the target value) for data throughput (the SLO metric) to be achieved by the network storage system when servicing the workload. Different workloads can interfere with each other by competing for resources to satisfy individual SLOs.
The SLOs can be specified, for example, in terms of performance (e.g., latency, throughput), security, reliability, capacity, protection, etc. Moreover, the characteristics and the workload of the applications can change during different times of the day, as seen by the storage servers. For example, certain e-commerce websites experience peak or average loads during morning time as compared to late evenings. Storage vendors generally agree to meet the SLOs of these applications. Traditionally, storage vendors have taken some efforts to ensure that (a) the SLOs are met and (b) to address SLO violations, keeping in mind the dynamic nature of the workloads. Examples of the efforts to meet the SLOs include SLO conformance and planning, changes in storage data layouts, and dynamically instantiating resources for caching, etc.